package com.yangming.springboot.deepin.playTest;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @创建人 ym
 * @创建时间 2021/4/8 0008
 * @描述
 **/
public class WaitNotify {

    private static boolean flag = true;
    private static Object lock = new Object();

    public static void main(String[] args) throws Exception{
        Thread waitThread = new Thread(new Wait(), "WaitThread");
        waitThread.start();
        SleepUtils.second(1);
        Thread notifyThread = new Thread(new Notify(), "NotifyThread");
        notifyThread.start();
    }

    public static class Wait implements Runnable{
        @Override
        public void run(){
            synchronized(lock){
                while(flag){
                    try{
                        System.out.println(Thread.currentThread() + "flag is true." + new SimpleDateFormat("HH:mm:ss").format(new Date()));
                        lock.wait();
                    }catch(InterruptedException e){
                        e.printStackTrace();
                    }
                }
                System.out.println(Thread.currentThread() + "flag is false. running @" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
            }
        }
    }

    public static class Notify implements Runnable{
        @Override
        public void run(){
            synchronized(lock){
                System.out.println(Thread.currentThread() + "hold lock. notify @" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
                lock.notifyAll();
                flag = false;
                SleepUtils.second(5);
            }
            synchronized(lock){
                System.out.println(Thread.currentThread() + "hold lock again. sleep @" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
                SleepUtils.second(5);
            }
        }
    }

}
